#!/bin/bash

# 远程服务器配置
REMOTE_USER="jiangwx"
REMOTE_HOST="100.84.130.52"
REMOTE_PATH="/home/jiangwx/work/unet/rtl"

# 本地项目路径
LOCAL_PATH="$(cd "$(dirname "$0")" && pwd)"

# 要排除的文件和目录
EXCLUDE_LIST=(
    ".git"
    "*.log"
    "*.tmp"
    "__pycache__"
    "*.pyc"
    ".DS_Store"
    "*.swp"
    "*.swo"
    "build"
    "obj_dir"
    "*.vcd"
    "*.fst"
)

# 构建排除参数
EXCLUDE_ARGS=""
for item in "${EXCLUDE_LIST[@]}"; do
    EXCLUDE_ARGS="$EXCLUDE_ARGS --exclude=$item"
done

# 颜色输出
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
RED='\033[0;31m'
NC='\033[0m' # No Color

echo -e "${YELLOW}======================================${NC}"
echo -e "${YELLOW}开始同步代码到远程服务器${NC}"
echo -e "${YELLOW}======================================${NC}"
echo -e "${GREEN}本地路径:${NC} $LOCAL_PATH"
echo -e "${GREEN}远程路径:${NC} $REMOTE_USER@$REMOTE_HOST:$REMOTE_PATH"
echo ""

# 检查远程服务器连接
echo -e "${YELLOW}检查远程服务器连接...${NC}"
if ssh -o ConnectTimeout=5 "$REMOTE_USER@$REMOTE_HOST" "echo 'Connected'" &> /dev/null; then
    echo -e "${GREEN}✓ 连接成功${NC}"
else
    echo -e "${RED}✗ 无法连接到远程服务器${NC}"
    echo -e "${RED}请检查: 1) 网络连接 2) SSH配置 3) 服务器地址和用户名${NC}"
    exit 1
fi

# 确保远程目录存在
echo -e "${YELLOW}确保远程目录存在...${NC}"
ssh "$REMOTE_USER@$REMOTE_HOST" "mkdir -p $REMOTE_PATH"

# 使用rsync进行同步(如果有的话，比scp更高效)
if command -v rsync &> /dev/null; then
    echo -e "${YELLOW}使用 rsync 同步文件...${NC}"
    rsync -avz --progress \
        $EXCLUDE_ARGS \
        "$LOCAL_PATH/" \
        "$REMOTE_USER@$REMOTE_HOST:$REMOTE_PATH/"
    
    if [ $? -eq 0 ]; then
        echo -e "${GREEN}======================================${NC}"
        echo -e "${GREEN}✓ 同步完成！${NC}"
        echo -e "${GREEN}======================================${NC}"
    else
        echo -e "${RED}✗ 同步失败${NC}"
        exit 1
    fi
else
    # 如果没有rsync，使用scp
    echo -e "${YELLOW}使用 scp 同步文件...${NC}"
    echo -e "${YELLOW}注意: 建议安装 rsync 以获得更好的性能和增量传输${NC}"
    
    # 使用tar打包后传输，然后在远程解压
    TEMP_TAR="/tmp/unet_rtl_sync_$(date +%Y%m%d_%H%M%S).tar.gz"
    
    echo -e "${YELLOW}打包文件...${NC}"
    tar czf "$TEMP_TAR" \
        --exclude=".git" \
        --exclude="*.log" \
        --exclude="*.tmp" \
        --exclude="__pycache__" \
        --exclude="*.pyc" \
        --exclude=".DS_Store" \
        --exclude="*.swp" \
        --exclude="*.swo" \
        --exclude="build" \
        --exclude="obj_dir" \
        --exclude="*.vcd" \
        --exclude="*.fst" \
        -C "$LOCAL_PATH" .
    
    echo -e "${YELLOW}传输文件...${NC}"
    scp "$TEMP_TAR" "$REMOTE_USER@$REMOTE_HOST:$REMOTE_PATH/"
    
    if [ $? -eq 0 ]; then
        echo -e "${YELLOW}解压文件...${NC}"
        TEMP_TAR_NAME=$(basename "$TEMP_TAR")
        ssh "$REMOTE_USER@$REMOTE_HOST" "cd $REMOTE_PATH && tar xzf $TEMP_TAR_NAME && rm $TEMP_TAR_NAME"
        
        # 清理本地临时文件
        rm "$TEMP_TAR"
        
        echo -e "${GREEN}======================================${NC}"
        echo -e "${GREEN}✓ 同步完成！${NC}"
        echo -e "${GREEN}======================================${NC}"
    else
        echo -e "${RED}✗ 传输失败${NC}"
        rm "$TEMP_TAR"
        exit 1
    fi
fi

# 显示远程文件列表
echo ""
echo -e "${YELLOW}远程目录内容:${NC}"
ssh "$REMOTE_USER@$REMOTE_HOST" "ls -lh $REMOTE_PATH"
